home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / amigae.june.archive / 000078_crash!mars.let.uva.nl!wouter_Sun, 13 Jun 93 19:46:55 PST.msg < prev    next >
Text File  |  1993-08-31  |  8KB  |  267 lines

  1. Received: by bkhouse.cts.com (V1.16/Amiga)
  2.     id AA00000; Sun, 13 Jun 93 19:46:55 PST
  3. Received: from mars.let.uva.nl by crash.cts.com with smtp
  4.     (Smail3.1.28.1 #15) id m0o52sq-0000IeC; Sun, 13 Jun 93 17:58 PDT
  5. Received: by mars.let.uva.nl id AA13624
  6.   (5.65c/IDA-1.4.4 for amigae@bkhouse.cts.com); Mon, 14 Jun 1993 03:01:52 +0200
  7. Return-Path: <wouter@mars.let.uva.nl>
  8. Date: Mon, 14 Jun 1993 03:01:52 +0200
  9. Message-Id: <199306140101.AA13624@mars.let.uva.nl>
  10. X-Organisation: Department of Computational Linguistics,
  11.                 University of Amsterdam
  12.                 Spuistraat 134, 1012 VB Amsterdam, The Netherlands
  13. From: Wouter van Oortmerssen <wouter@mars.let.uva.nl>
  14. To: amigae@bkhouse.cts.com
  15. Subject: E and the rest of the world ...
  16.  
  17. Hello all,
  18.  
  19. In some articles for this list I'd like to address some common
  20. problems that people might have with E, for example working with
  21. OBJECTs. Now I will discuss E in general with repect to C, for
  22. people translating sources.
  23.  
  24. have fun with it,
  25.  
  26. Wouter.
  27.  
  28.  
  29. -----------------------------------------------------------------------
  30.  
  31.                Amiga E in terms of C/C++/Pascal etc.
  32.  
  33. This document is intended as yet another way to understand E, especially
  34. for those who already know another language, like C, and it may also be
  35. a guide for people translating to/from E.
  36. I personally always find it enlightening to see constructs of the
  37. language I'm learning as equivalent in a language I know already, and
  38. I know others do too.
  39.  
  40. In the first/second column I will match E against AnsiC/C++, the third
  41. column is reserved for a third language. I will mainly use Pascal here,
  42. but where a feature asks for it, I will use others (for example, LISP
  43. with quoted expression, Ada with exceptions etc.
  44.  
  45. note well: take these tables with a grain of salt. I'll try to denote
  46. syntactic equivalences, and semantic properties as well as possible,
  47. but different languages still need their own evaluation.
  48.  
  49. if you see errors in the translation, please let me know (especially
  50. my Pascal knowledge is somewhat rusty).
  51.  
  52. usage of signs:
  53.  
  54. -    = feature not available in language in question.
  55. ?    = author has no clue what this feature translates to.
  56.       (or atleast he's not sure).
  57. ...    = feature may be available, but no appropriate 1:1 translation
  58.       possible to make it interesting.
  59. x,y,z    = arbitrary identifiers
  60. e,f,g    = arbitrary expressions
  61. s,t,u    = arbitrary statements
  62. i,j,k    = arbitrary integers
  63. etc.
  64.  
  65.  
  66. -----------------------------------------------------------------------
  67. STRUCTURE/STATEMENTS
  68.  
  69. E            C/C++            Pascal
  70. ----------------------- ----------------------- -----------------------
  71. PROC x()        int x() {        FUNCTION x:INTEGER;
  72. PROC x(y,z)        int x(y,z) {        FUNCTION x(y,z:INTEGER):INTEGER;
  73. ENDPROC            return 0; };        x:=0; END;
  74. ENDPROC e        return e; };        x:=e; END;
  75. RETURN e        return e;        ?
  76.  
  77. IF e            if(e) {            IF e THEN BEGIN
  78. ELSEIF e        } else if(e) {        END ELSE IF e THEN BEGIN
  79. ELSE            } else {        END ELSE BEGIN
  80. ENDIF            };            END;
  81. IF e THEN s        if(e) s;        IF e THEN s;
  82. IF e THEN s ELSE t    if(e) s else t;        IF e THEN s ELSE t;
  83.  
  84. FOR x:=e TO f        - (1)            FOR x:=e TO f DO BEGIN
  85. FOR x:=e TO f STEP i    -            - (2)
  86. ENDFOR            -            END;
  87. FOR x:=e TO f DO s    -            FOR x:=e TO f DO s;
  88.  
  89. WHILE e            while(e) {        WHILE e DO BEGIN
  90. ENDWHILE        };            END;
  91. WHILE e DO s        while(e) s;        WHILE e DO s;
  92.  
  93. s; WHILE e        for(s;e;u) {        s; WHILE e DO BEGIN
  94.   t; u              t;              t; u
  95. ENDWHILE        };            END;
  96.  
  97. REPEAT            do {            REPEAT
  98. UNTIL e            } while(!e);        UNTIL e;
  99.  
  100. LOOP            for(;;) {        WHILE TRUE DO BEGIN (?)
  101. ENDLOOP            };            END;
  102.  
  103. INC x            x++;            x:=x+1;
  104. DEC x            x--;            x:=x-1;
  105. JUMP lab        goto lab;        GOTO lab;
  106. x:=e            x=e;            x:=e;
  107.  
  108. (1) see WHILE; C has no FOR, "for" in C is another way of writing "while"
  109. (2) only STEP -1 as DOWNTO
  110.  
  111.  
  112. -----------------------------------------------------------------------
  113. VALUES
  114.  
  115. E            C/C++            Pascal
  116. ----------------------- ----------------------- -----------------------
  117. 1            1            1
  118. 1.0            1.0            1.0
  119. $1            0x1            ?
  120. %1            ?            ?
  121. "a"            'a'            chr(97) (?)
  122. 'blabla'        "blabla"        'blabla'
  123. [1,2,3]            - (1)            -
  124. [1,2,3]:INT        -            -
  125.  
  126. (1) in translating from E to C, you can often simulate them with:
  127.  
  128. myfunc([1,2,3])
  129.  
  130. becomes:
  131.  
  132. int dummy [] = {1,2,3};
  133. myfunc(dummy);
  134.  
  135.  
  136. -----------------------------------------------------------------------
  137. OPERATORS
  138.  
  139. E            C/C++            Pascal
  140. ----------------------- ----------------------- -----------------------
  141. + - * /            + - * /            + - * DIV
  142. = <> > < >= <=        == != > < >= <=        = <> > < >= <=
  143. AND OR    (log)        && ||            and or
  144. AND OR    (bit)        & |            ?
  145. SIZEOF x        sizeof(x)        -
  146. `e            -            - (1)
  147. ^x            *x            ...
  148. {x}            &x            ...
  149. x++            x++            -
  150. x--            --x            -
  151. -x            -x            -x
  152. IF e THEN f ELSE g    e ? f : g        -
  153. x.y            x->y    x.y        x^.y    x.y
  154. a:=x.y; a.z        x->y->z x.y.z        x^.y^.z x.y.z
  155. x:=e            x=e            -
  156. e BUT f            (e,f)            -
  157. x[]            x[0] *x (2)        x[0]
  158. x[1]            x[1]            x[1]
  159. x[1].y            x[1]->y            x[1]^.y
  160. x[]++            *x++            -
  161. x[1].y++        *(x+1)++        -
  162.  
  163. (1) see QUOTED EXPRESSIONS
  164. (2) also for others, equivalences between *(x+e) and x[e] hold.
  165.  
  166.  
  167. -----------------------------------------------------------------------
  168. CONSTANTS/TYPES
  169.  
  170. E            C/C++            Pascal
  171. ----------------------- ----------------------- -----------------------
  172. CONST X=1        #define X 1        CONST X=1;
  173.             const int X=1;
  174. ENUM X,Y,Z        #define X 0 (etc.)    TYPE x=(X,Y,Z);
  175.             enum x{X,Y,Z};
  176. SET X,Y,Z        -            TYPE x=SET OF (X,Y,Z);
  177.  
  178. DEF                        VAR
  179. x            int x; (or: long x;)    x:INTEGER;
  180. x:LONG            int x;            x:INTEGER;
  181. x:PTR TO y        struct y* x;        x:^y;
  182. x:y            struct y x;        x:y;
  183. x[10]:ARRAY OF y    struct y x[10];        x:ARRAY [0..9] OF y;
  184. x[10]:STRING        - (1)            x:STRING[10]; (2)
  185. x[10]:LIST        - (1)            - (1)
  186.  
  187. OBJECT x        struct x {    (3)    TYPE x = RECORD
  188.   y:CHAR,z:INT          char y; short z;      y:CHAR; z:INTEGER;
  189. ENDOBJECT        };            END;
  190.  
  191. (1) when translating from E to C, simulate with an array of char/int resp.,
  192.     and do your own range-checking etc.
  193. (2) no Wirth Pascal, but available in all popular dialects.
  194. (3) or public class ofcourse...
  195.  
  196.  
  197. -----------------------------------------------------------------------
  198. QUOTED EXPRESSIONS
  199.  
  200. E            LISP                MIRANDA
  201. ----------------------- --------------------------- -------------------
  202. `e            (QUOTE e)  'e            ?
  203.             (LAMBDA () e)     (1)
  204. `x+y            '(+ x y)
  205. Eval(`e)        (EVAL `e)
  206. ForAll(v,l,`e)        - (2)
  207. MapList(v,l,l,`e)    (MAPCAR (LAMBDA (V) E) L)   map (\v->e) l
  208.  
  209. example:
  210.  
  211. E:        MapList({x},[1,2,3,4],a,`x*x)
  212. MIRANDA:    map (\x->x*x) [1,2,3,4]
  213. LISP:        (MAPCAR (LAMBDA (X) (* X X) `(1 2 3 4))
  214.  
  215. (1) really QUOTE, but sometimes used where in LISP LAMBDA would be
  216.     used, like in MapList()
  217. (2) not even in ProLog, see other logical languages.
  218.  
  219.  
  220. -----------------------------------------------------------------------
  221. EXCEPTIONS
  222.  
  223. E            C++            ADA
  224. ----------------------- ----------------------- -----------------------
  225. PROC x() HANDLE        int x() { try {        function x is begin
  226. EXCEPT            } catch (exc) {   (1)    exception
  227. ENDPROC            }};            end x;
  228.  
  229. Raise(e)        throw e;        raise e;
  230. RAISE "MEM" IF New()=0    -            - (2)
  231.  
  232.  
  233. (1) catch handles only one specific exception, it's quite different
  234.     from general exception handlers as used in E.
  235. (2) the runtime system does raise some exceptions, but I'm not sure
  236.     wether automatically raised exceptions can be defined in Ada.
  237.  
  238.  
  239. -----------------------------------------------------------------------
  240. BUILTIN FUNCTIONS
  241. (only a few are presented here, as an example)
  242.  
  243. E            C/C++            Pascal
  244. ----------------------- ----------------------- -----------------------
  245. WriteF(fs,...)        printf(fs,...);        WriteLn(a,b,...);
  246.             cout << a << b ... ;
  247.  
  248. ReadStr(f,s)        scanf(fs,...)        ReadLn(s)
  249. Val(s,n)                    ?
  250.             cin >> s;
  251.  
  252. StrCopy(s,s,n)    (1)    strcpy(s,s)        s:=s;
  253.  
  254. p:=New(e)        p=malloc(e);        New(p);
  255.             p=new type;
  256. Dispose(p)        free(p);        Dispose(p);
  257.             delete p;
  258.  
  259. Mod(e,e)        e%e            e MOD e
  260. Shl(e,n)        e<<n            -
  261. Long(e)            -            -
  262.  
  263. (1) when translating from C, make sure you turn the arrays of char into
  264.     proper STRINGs.
  265.  
  266.  
  267. -------------------------------EOF--------------------------------------